package com.zy.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.business.domain.TbProject;
import com.zy.business.domain.TbProjectOperRecord;
import com.zy.business.domain.TbProjectProgressRate;
import com.zy.business.domain.vo.ProjectDto;
import com.zy.common.core.domain.AjaxResult;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

public interface ProjectService extends IService<TbProject> {

    /**
     * 获取项目列表
     * @param project
     * @return
     */
    List<TbProject> selectProjectList(ProjectDto project);

    /**
     * 添加项目
     * @param project
     * @return
     */
    int addProject(TbProject project);

    /**
     * 修改项目
     * @param project
     * @return
     */
    int editProject(TbProject project);

    /**
     * 验证项目名称是否已存在
     * @param projectId
     * @param name
     * @return
     */
    Boolean existedProjectName(Long projectId, String name);

    /**
     * 删除项目
     * @param projectId
     * @return
     */
    AjaxResult deleteProject(Long projectId);

    /**
     * 添加项目进度
     * @param progressRate
     * @return
     */
    int addProgressRate(TbProjectProgressRate progressRate);

    /**
     * 获取项目工时统计列表
     * @param projectId
     * @return
     */
    List<Map<String, Object>> getWorkHourList(Long projectId);

    /**
     * 导出工时统计列表
     * @param projectId
     * @param response
     */
    void exportWorkHourList(Long projectId, HttpServletResponse response);

    /**
     * 获取用户所属项目
     * @return
     */
    List<Map<String, String>> getProjectByUser();

    /**
     * 获取项目详情
     * @param projectId
     * @return
     */
    AjaxResult getDetail(Long projectId);

    /**
     * 根据项目id获取项目进度列表
     * @param projectId
     * @return
     */
    List<TbProjectProgressRate> getProgressRateList(Long projectId);

    /**
     * 获取部门成员数据
     * @return
     */
    AjaxResult getDeptUser();

    /**
     * 获取项目操作日志列表
     * @param projectId
     * @return
     */
    List<TbProjectOperRecord> getProjectOperList(Long projectId);
}
